<title>switch/case keywords</title>

<head>
<script language="JavaScript">
</script>
</head>

<body bgcolor="#ffffcc">
<hr>
<center>
<h1>The 'switch' and 'case' keywords</h1>
</center>
<hr>
<p>

The <b>switch-case</b> statement is a multi-way decision statement. Unlike the 
multiple decision statement that can be created using 
<a href=if.html>if-else</a>, the <b>switch</b>
statement evaluates the conditional 
<a href="../CONCEPT/expressions.html">expression</a> and tests it against 
numerous 
<a href="../CONCEPT/constants.html">constant</a> 
values. The branch corresponding to the value that the 
expression matches is taken during execution.
<p>
The value of the expressions in a switch-case statement must be an ordinal 
type i.e. 
<a href="../CONCEPT/data_types.html">integer, char, short, long</a>, 
etc. Float and double are not 
allowed. 
<p>
The syntax is :
<p>
<center>
<table bgcolor="ivory">
<tr>
<td>
<pre>

     switch( expression )
     {
        case constant-expression1:	statements1;
        [case constant-expression2:	statements2;]    
        [case constant-expression3:	statements3;]
        [default : statements4;]
     }
</pre>
</td>
</tr>
</table>
</center>
<p>

The <b>case</b> statements and the <b>default</b> statement can occur in any 
order in 
the <b>switch</b> statement. The <b>default</b> clause is an optional clause 
that is 
matched if none of the constants in the <b>case</b> statements can be matched.
<p>
Consider the example shown below:
<p>
<center>
<table bgcolor="ivory">
<tr>
<td>
<pre>

     switch( Grade )
     {
        case 'A' : printf( "Excellent" );
        case 'B' : printf( "Good" );
        case 'C' : printf( "OK" );
        case 'D' : printf( "Mmmmm...." );
        case 'F' : printf( "You must do better than this" );    
        default  : printf( "What is your grade anyway?" );
     }		
</pre>
</td>
</tr>
</table>
</center>
<p>

Here, if the Grade is 'A' then the output will be
<p>
<center>
<table bgcolor="ivory">
<tr>
<td>
<pre>
     Excellent
     Good
     OK
     Mmmmm....
     You must do better than this    
     What is your grade anyway?
</pre>
</td>
</tr>
</table>
</center>
<p>

This is because, in the 'C' <b>switch</b> statement, execution continues on into 
the next case clause if it is not explicitly specified that the execution 
should exit the <b>switch</b> statement. The correct statement would be:
<p>
<center>
<table bgcolor="ivory">
<tr>
<td>
<pre>

     switch( Grade )
     {
        case 'A' : printf( "Excellent" );
                   break;

        case 'B' : printf( "Good" );
	           break;

	case 'C' : printf( "OK" );
	           break;

        case 'D' : printf( "Mmmmm...." );
	           break;

	case 'F' : printf( "You must do better than this" );    
	           break;

	default  : printf( "What is your grade anyway?" );
                   break;
	}		
</pre>
</td>
</tr>
</table>
</center>
<p>

Although the <b>break</b> in the <b>default</b> clause (or in general, after 
the last 
clause) is not necessary, it is good programming practice to put it in 
anyway. 
<p>
An example where it is better to allow the execution to continue into the 
next <b>case</b> statement:
<p>
<center>
<table bgcolor="ivory">
<tr>
<td>
<pre>

     char Ch;
     .
     .
     switch( Ch )
     {
       			/* Handle lower-case characters */ 
        case 'a' :
        case 'b' :
       	      .
	      .
	      .
        case 'z' :
          printf( "%c is a lower-case character.\n", Ch );
	  printf( "Its upper-case is %c.\n" toupper(Ch) );      
	  break;

       			/* Handle upper-case characters */
	case 'A' :	
	case 'B' :
	      .
	      .
	      .
	case 'Z' :
           printf( "%c is a upper-case character.\n", Ch );
	   printf( "Its lower-case is %c.\n" tolower(Ch) );
	   break;

       			/* Handle digits and special characters */   

        default  :
           printf( "%c is not in the alphabet.\n", Ch );
	   break;

     }
     .
     .
</pre>
</td>
</tr>
</table>
</center>
<p>

<hr>
<h2>Example:</h2>
<img src="../../GRAPHICS/computer.gif" align=center>
<a href=../EXAMPLES/switch.c>Basic <b>switch</b> example.</a>
<br clear=left>
<hr>
<h2>See also:</h2>
<ul>
<li><a href=if.html>if keyword</a>.
</ul>

<p>

<hr>
<p>
<center>
<table border=2 width="80%" bgcolor="ivory">
<tr align=center>
<td width="25%">
<a href="../cref.html">                  Top</a>
</td><td width="25%">
<a href="../master_index.html">          Master Index</a>
</td><td width="25%">
<a href="keywords.html">                 Keywords</a>
</td><td width="25%">
<a href="../FUNCTIONS/funcref.htm">      Functions</a>
</td>
</tr>
</table>
</center>
<p>
<hr>
<address><a href="../../address.html">Martin Leslie</a> 
</address><p>
<address><a href="../../addr_vkanit.html">Vinay Kanitkar</a>
</body>
</html>
